查看原文
其他

Android 兼容性 | Google Play 开发者 FAQ 特别版

2017-05-22 Google Play 谷歌开发者


在前两期的《Google Play 开发者 FAQ》中,我们重点关注的是开发者在初期使用 Google Play 时可能会在注册账号阶段或成为商家收付款时遇到的问题,并给出详细的讲解。在本期的开发者 FAQ 中我们将回答开发者们在 Android 兼容性方面的常见问题。我们把收集到的一些开发者们提出关于 Android 不同版本使用各项功能时常见的兼容性问题汇总,并给予了相应的答案以及处理解决的最佳方案,希望它们可以帮您解决一些在处理 Android 性能以及兼容性时所遇到的疑惑。



App 经常因为内存泄露而崩溃,如何防止我的应用发生类似问题呢?

开发 Android 应用时,请始终注意您的应用使用了多少随机存取存储器 (RAM)。尽管 Dalvik 和 ART 运行时会执行例行垃圾回收 (GC),您仍然需要了解应用何时以及在哪里分配和释放内存。为了提供稳定的用户体验,使 Android 操作系统能够在应用之间快速切换,请确保您的应用在用户不与其交互时不会消耗不必要的内存。

即使您在开发过程中遵循了管理应用的内存的所有最佳做法,您仍然可能泄漏对象或引入其他内存错误。唯一能够确定您的应用尽可能少地使用内存的方法是,利用以下链接中介绍的工具分析应用的内存使用情况。

(https://developer.android.google.cn/studio/profile/investigate-ram.html)



用户反应耗电量大,如何对低电耗模式和应用待机模式进行针对性优化呢?

从 Android 6.0(API 级别 23)开始,Android 引入了两个省电功能,可通过管理应用在设备未连接至电源时的行为方式为用户延长电池寿命。低电耗模式通过在设备长时间处于闲置状态时推迟应用的后台 CPU 和网络 Activity 来减少电池消耗。应用待机模式可推迟用户近期未与之交互的应用的后台网络 Activity。

低电耗模式和应用待机模式管理在 Android 6.0 或更高版本上运行的所有应用的行为,无论它们是否特别针对 API 级别 23。为确保用户获得最佳体验,请在低电耗模式和应用待机模式下测试您的应用并对代码进行必要的调整。 以下链接中的部分内容介绍了详细信息。

(https://developer.android.google.cn/training/monitoring-device-state/doze-standby.html)



如何确定哪些权限是我需要声明的呢?

每款 Android 应用都在访问受限的沙盒中运行。如果应用需要使用其沙盒外的资源或信息,则必须请求相应权限。您可以在应用清单中列出相应的权限,声明应用需要此权限。

根据权限的敏感性,系统可能会自动授予权限,或者需要由设备用户对请求进行许可。例如,如果您的应用请求打开设备手电筒的权限,系统将自动授予该权限。但如果您的应用需要读取用户联系人,系统会要求用户授权。用户需要在安装应用(运行 Android 5.1 和更低版本的设备)或者运行应用(运行 Android 6.0 和更高版本的设备)时授予权限,具体取决于平台版本。您可以通过点击以下链接了解更多内容。

(https://developer.android.google.cn/training/permissions/declaring.html)



应用安装时的权限请求怎么不见了?

从 Android 6.0(API 级别 23)开始,用户开始在应用运行时向其授予权限,而不是在应用安装时授予。此方法可以简化应用安装过程,因为用户在安装或更新应用时不需要授予权限。它还让用户可以对应用的功能进行更多控制;例如,用户可以选择为相机应用提供相机访问权限,而不提供设备位置的访问权限。用户可以随时进入应用的 “Settings” 屏幕调用权限。


系统权限分为两类正常权限 和 危险权限

  • 正常权限不会直接给用户隐私权带来风险。如果您的应用在其清单中列出了正常权限,系统将自动授予该权限。

  • 危险权限会授予应用访问用户机密数据的权限。如果您的应用在其清单中列出了正常权限,系统将自动授予该权限。如果您列出了危险权限,则用户必须明确批准您的应用使用这些权限。


如需了解详细信息,请参阅以下链接中有关正常权限和危险权限的详细内容。

(https://developer.android.google.cn/guide/topics/security/permissions.html#normal-dangerous)


在所有版本的 Android 中,您的应用都需要在其应用清单中同时声明它需要的正常权限和危险权限,如声明权限中所述。不过,该声明的影响因系统版本和应用的目标 SDK 级别的不同而有所差异:

  • 如果设备运行的是 Android 5.1 或更低版本,或者应用的目标 SDK 为 22 或更低:如果您在清单中列出了危险权限,则用户必须在安装应用时授予此权限;如果他们不授予此权限,系统根本不会安装应用。

  • 如果设备运行的是 Android 6.0 或更高版本,或者应用的目标 SDK 为 23 或更高:应用必须在清单中列出权限,并且它必须在运行时请求其需要的每项危险权限。用户可以授予或拒绝每项权限,且即使用户拒绝权限请求,应用仍可以继续运行有限的功能。


:从 Android 6.0(API 级别 23)开始,用户可以随时从任意应用调用权限,即使应用面向较低的 API 级别也可以调用。无论您的应用面向哪个 API 级别,您都应对应用进行测试,以验证它在缺少需要的权限时行为是否正常。


您可以通过以下链接详细了解如何使用 Android 支持库来检查和请求权限。Android 框架从 Android 6.0(API 级别 23)开始提供类似方法。不过,使用支持库更简单,因为在调用方法前,您的应用不需要检查它在哪个版本的 Android 上运行。

(https://developer.android.google.cn/training/permissions/requesting.html)



许多用户反馈我们的 App 权限太多,那我应该如何申请权限才不会令人反感呢?

应用如果一味要求用户提供授权,可能会让用户无所适从。如果用户发现应用难以使用,或者担心应用会滥用其信息,他们可能不愿意使用该应用,甚至会将其完全卸载。以下最佳做法有助于避免此类糟糕的用户体验。

每次您要求权限时,实际上是在强迫用户作出决定。您应尽量减少提出这些请求的次数。如果用户运行的是 Android 6.0(API 级别 23)或更高版本,则每次用户尝试要求提供权限的新应用功能时,应用都必须中断用户的操作并发起权限请求。如果用户运行的是较早版本的 Android,则在安装应用时需要为应用的每一权限请求给予授权;如果列表过长或看起来不合适,用户可能会决定不安装该应用。为此,您应尽量减少应用需要的权限数。

 

如果用户运行的是 Android 6.0(API 级别 23)或更高版本,则用户必须在应用运行时为其授权。如果您的应用一次要求用户提供多项权限,用户可能会感到无所适从并因此退出应用。您应根据需要请求权限。您可以通过查看以下链接详细了解处理权限时的最佳做法。

(https://developer.android.google.cn/training/permissions/best-practices.html)



如何在旧版本的 Android 中添加支持的语言和语言区域?

从 Android 7.0(API 级别 24)开始,Android 为多语言用户提供增强的支持,让他们可以在设置中选择多个语言区域。Android 通过大幅扩展受支持的语言区域数量并更改系统解析资源的方式来提供此功能。

以下链接中的内容将首先说明低于 7.0(API 级别 24)的 Android 版本中的资源解析策略,接着介绍 Android 7.0 中改进的资源解析策略,最后说明如何充分利用扩展的语言区域数量来支持更多的多语言用户。

(https://developer.android.google.cn/guide/topics/resources/multilingual-support.html#preN)



如何优化自己的应用从而在不同尺寸的屏幕上都有良好运行体验?

Android 可在各种具有不同屏幕尺寸和密度的设备上运行。对于应用,Android 系统在不同设备中提供一致的开发环境,可以处理大多数工作,将每个应用的用户界面调整为适应其显示的屏幕。 同时,系统提供 API,可用于控制应用适用于特定屏幕尺寸和密度的 UI,以针对不同屏幕配置优化 UI 设计。 例如,您可能想要不同于手机 UI 的平板电脑 UI。

虽然系统为使您的应用适用于不同的屏幕,会进行缩放和大小调整,但您应针对不同的屏幕尺寸和密度优化应用。 这样可以最大程度优化所有设备上的用户体验,用户会认为您的应用实际上是专为他们的设备而设计,而不是简单地拉伸以适应其设备屏幕。

按照以下链接中所述的做法,您可以创建正常显示的应用,然后使用一个 .apk 文件在所有支持的屏幕配置中提供优化的用户体验。

(https://developer.android.google.cn/training/multiscreen/screensizes.html)



希望本期的 FAQ 帮助您解决了部分问题,如果您在开发应用时遇到其他的 Android 兼容性或 Google Play 问题,欢迎积极在我们的公众平台留言反馈,我们会对开发者们的问题进行集中汇总处理,并选取一些有代表性的、被提及次数较多的问题进行答复,将其制作成定期的《Google Play 开发者 FAQ》文章。

 

希望自己的问题得到解决并帮助更多有同样困惑的开发者吗?快来留言吧!


推荐阅读:

更好用!I/O大会公布了这些Google Play管理中心新功能

移动应用设计:易用性和易读性

四月刊 | Google Play 开发者 FAQ

首发 | Google Play 开发者 FAQ 第一期


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存